Va chạm trong game là gì?
Va chạm (collision) xảy ra khi hai đối tượng trên sân khấu chạm vào nhau — nhân vật đụng tường, nhặt đồng xu, bị quái vật bắt… Trong Scratch, máy tính tự kiểm tra xem các hình ảnh có chồng lên nhau không, rồi kích hoạt hành động tương ứng.
Phát hiện va chạm giúp game có luật chơi: ăn được gì, chạm gì thì thua, đụng tường thì dừng lại. Không có va chạm, nhân vật sẽ xuyên qua mọi thứ — game mất ý nghĩa.
Scratch kiểm tra va chạm dựa trên vùng hình ảnh không trong suốt (pixel) của nhân vật, không phải chỉ khung hình chữ nhật bao quanh.
Giới hạn biên màn hình
Sân khấu Scratch có kích thước cố định 480 × 360 pixel. Nhân vật di chuyển tự do có thể "bay" ra ngoài màn hình nếu không xử lý biên. Giới hạn biên giúp nhân vật luôn nằm trong vùng nhìn thấy được.
Khối "chạm cạnh?" — Giới hạn biên đơn giản
Khối chạm cạnh? (nhóm Cảm biến) trả về đúng khi nhân vật chạm bất kỳ mép nào của sân khấu. Đây là cách nhanh nhất để xử lý biên.
Bóng di chuyển liên tục và đổi hướng mỗi khi chạm mép sân khấu.
Giới hạn biên bằng tọa độ
Cách bật lại đôi khi không phù hợp (nhân vật đi bộ không nên "nảy"). Khi đó, dùng điều kiện tọa độ để giới hạn vị trí:
Khi x vượt quá 230 (gần mép phải), nhân vật bị "kéo" về — không thể đi thêm. Làm tương tự cho trái (−230), trên (170), dưới (−170).
Dùng 230 thay vì 240 vì nhân vật có kích thước — tâm nhân vật ở 240 thì một nửa hình vẫn nằm ngoài màn hình.
Phát hiện va chạm giữa hai nhân vật
Khối chạm [tên nhân vật]? kiểm tra hai nhân vật có chồng lên nhau không. Đây là nền tảng của hầu hết tương tác trong game.
Các tình huống thường gặp
- Nhặt vật phẩm: chạm đồng xu → tăng điểm, ẩn đồng xu.
- Va chạm kẻ thù: chạm quái → trừ mạng hoặc thua.
- Đến đích: chạm cờ đích → thắng màn chơi.
- Đẩy vật: chạm hộp → hộp di chuyển theo.
Phát hiện va chạm với màu (nền)
Khối chạm màu [#…]? kiểm tra nhân vật có chạm vùng màu cụ thể trên sân khấu không. Rất hữu ích khi nền có màu đại diện cho đất, nước, lava…
Dùng bút eyedropper trong Scratch để lấy đúng mã màu của nền đất trên phông nền.
Va chạm màu chỉ hoạt động tốt khi phông nền có màu rõ ràng, đồng nhất. Nền gradient hoặc ảnh phức tạp có thể gây nhầm lẫn.
Khoảng cách — Va chạm mềm
Thay vì chờ hai nhân vật chồng hẳn lên nhau, bạn có thể dùng khoảng cách đến [nhân vật] để phát hiện khi chúng đủ gần:
Cách này tạo "vùng cảnh báo" quanh nhân vật — hữu ích cho game né tránh, radar, hoặc khi hình ảnh nhân vật có nhiều khoảng trống trong suốt.
Kết hợp va chạm và giới hạn biên
Game thực tế thường xử lý cả hai cùng lúc trong một vòng lặp:
Đặt kiểm tra biên trước, rồi mới kiểm tra va chạm với đối tượng — thứ tự điều kiện ảnh hưởng đến hành vi nhân vật.
Dự án thực hành: Game né chướng ngại vật
- Tạo nhân vật chính, biến
điểmvàmạng. - Điều khiển bằng 4 phím mũi tên trong vòng lặp vô hạn.
- Thêm
nếu chạm cạnh thì bật lạihoặc giới hạn tọa độ. - Tạo chướng ngại vật di chuyển ngẫu nhiên — nếu chạm thì trừ mạng.
- Tạo vật phẩm — nếu chạm thì +điểm và ẩn vật phẩm.
- Nếu mạng = 0 → thua; nếu điểm ≥ 30 → thắng.
Lỗi thường gặp
- Va chạm không nhận: nhân vật có vùng trong suốt lớn — thu nhỏ hoặc chỉnh vùng va chạm.
- Va chạm liên tục: điểm tăng quá nhanh — thêm
chờhoặcẩnđối tượng sau khi chạm. - Nhân vật kẹt ở biên:
bật lạitrong góc có thể gây lặp vô hạn — dùng giới hạn tọa độ thay thế. - Chạm màu sai: màu nền không đồng nhất — dùng eyedropper lấy đúng mã màu.
- Kiểm tra sai nhân vật: code gắn vào nhân vật A nhưng kiểm tra chạm nhân vật B.
- Bài 1: Rắn săn mồi — chạm cạnh thì bật lại, chạm đuôi thì thua.
- Bài 2: Nhân vật chỉ di chuyển trong hình chữ nhật an toàn.
- Bài 3: Game thu thập — chạm vàng +1, chạm đỏ −1, ra ngoài biên thì reset vị trí.
Phát hiện va chạm và giới hạn biên biến sân khấu Scratch từ "màn hình trống" thành thế giới có luật. Hãy bắt đầu với chạm cạnh? và chạm [nhân vật]?, rồi dần thêm va chạm màu, khoảng cách — bạn sẽ tạo được game hoàn chỉnh và thú vị!